#!/bin/bash

# =============================================================================
# LimeReader .pkg 安装包构建脚本
# 创建类似 Windows 安装程序的专业 macOS 安装包
# =============================================================================

set -e

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${BLUE}🏗️  LimeReader PKG 安装包构建工具${NC}"
echo -e "${BLUE}创建专业的 macOS 安装程序${NC}"
echo

# 配置变量
VERSION="2.7.2"
APP_NAME="LimeReader.app"
BUILD_PATH="build/bin/$APP_NAME"
PKG_NAME="LimeReader_v${VERSION}_macOS"
IDENTIFIER="com.limereader.app"

# 检查工具依赖
echo -e "${YELLOW}🔍 检查构建工具...${NC}"

if ! command -v pkgbuild &> /dev/null; then
    echo -e "${RED}❌ pkgbuild 工具未找到${NC}"
    echo -e "${YELLOW}pkgbuild 是 macOS 开发工具的一部分，请安装 Xcode Command Line Tools${NC}"
    echo -e "运行: xcode-select --install"
    exit 1
fi

if ! command -v productbuild &> /dev/null; then
    echo -e "${RED}❌ productbuild 工具未找到${NC}"
    exit 1
fi

echo -e "${GREEN}✅ 构建工具检查通过${NC}"

# 检查应用是否存在
if [ ! -d "$BUILD_PATH" ]; then
    echo -e "${RED}❌ 应用未找到: $BUILD_PATH${NC}"
    echo -e "${YELLOW}请先运行: ./build_macos_release.sh${NC}"
    exit 1
fi

# 清理临时文件
echo -e "${YELLOW}🧹 准备应用文件...${NC}"
rm -f "$BUILD_PATH/Contents/MacOS/config.json"
rm -f "$BUILD_PATH/Contents/MacOS/debug.log"
rm -rf "$BUILD_PATH/Contents/MacOS/cache/"

# 确保应用正确签名
echo -e "${YELLOW}✍️  重新签名应用...${NC}"
codesign -f -s - "$BUILD_PATH"

# 创建临时目录
TEMP_DIR="pkg_temp"
ROOT_DIR="$TEMP_DIR/root"
SCRIPTS_DIR="$TEMP_DIR/scripts"

rm -rf "$TEMP_DIR"
mkdir -p "$ROOT_DIR/Applications"
mkdir -p "$SCRIPTS_DIR"

# 复制应用到 root 目录
echo -e "${YELLOW}📦 准备安装内容...${NC}"
cp -R "$BUILD_PATH" "$ROOT_DIR/Applications/"

# 创建安装前脚本
cat > "$SCRIPTS_DIR/preinstall" << 'EOF'
#!/bin/bash

# 检查是否已安装旧版本
OLD_APP="/Applications/LimeReader.app"
if [ -d "$OLD_APP" ]; then
    echo "检测到旧版本，正在卸载..."
    rm -rf "$OLD_APP"
fi

exit 0
EOF

# 创建安装后脚本
cat > "$SCRIPTS_DIR/postinstall" << 'EOF'
#!/bin/bash

# 设置应用权限
APP="/Applications/LimeReader.app"
if [ -d "$APP" ]; then
    # 修复可执行文件权限
    chmod +x "$APP/Contents/MacOS/LimeReader"

    # 修复整个应用的权限
    chown -R $USER:staff "$APP"
    chmod -R 755 "$APP"
    chmod -R 644 "$APP"/Contents/MacOS/*.conf 2>/dev/null || true
    chmod -R 644 "$APP"/Contents/Resources/* 2>/dev/null || true

    # 重新签名应用（修复权限问题）
    codesign -f -s - "$APP" 2>/dev/null || true
fi

# 检查是否允许应用运行
echo "安装完成！请从 Launchpad 或 Applications 文件夹启动 LimeReader"

exit 0
EOF

# 设置脚本权限
chmod +x "$SCRIPTS_DIR/preinstall"
chmod +x "$SCRIPTS_DIR/postinstall"

# 构建 .pkg 包
echo -e "${YELLOW}🏗️  构建 PKG 安装包...${NC}"

pkgbuild \
    --root "$ROOT_DIR" \
    --scripts "$SCRIPTS_DIR" \
    --identifier "$IDENTIFIER" \
    --version "$VERSION" \
    --install-location "/" \
    --app-sign "Developer ID Application: Your Name" \
    --timestamp \
    "${PKG_NAME}.pkg" 2>/dev/null || {

    # 如果开发者签名失败，创建无签名的包
    echo -e "${YELLOW}⚠️  开发者签名失败，创建未签名包...${NC}"
    pkgbuild \
        --root "$ROOT_DIR" \
        --scripts "$SCRIPTS_DIR" \
        --identifier "$IDENTIFIER" \
        --version "$VERSION" \
        --install-location "/" \
        "${PKG_NAME}.pkg"
}

# 清理临时文件
rm -rf "$TEMP_DIR"

# 检查是否成功生成
if [ -f "${PKG_NAME}.pkg" ]; then
    echo -e "${GREEN}🎉 PKG 安装包创建成功！${NC}"

    # 显示文件信息
    PKG_SIZE=$(stat -f%z "${PKG_NAME}.pkg" 2>/dev/null || echo "0")
    PKG_SIZE_MB=$(echo "scale=2; $PKG_SIZE / 1024 / 1024" | bc -l 2>/dev/null || echo "$(($PKG_SIZE / 1024 / 1024))")

    echo
    echo -e "${YELLOW}📋 安装包信息:${NC}"
    echo -e "   📦 文件名: ${PKG_NAME}.pkg"
    echo -e "   📊 文件大小: ${PKG_SIZE_MB} MB"
    echo -e "   🆔 包标识符: $IDENTIFIER"
    echo -e "   🔢 版本号: $VERSION"

    echo
    echo -e "${BLUE}🚀 使用方法:${NC}"
    echo -e "   1. 双击 ${PKG_NAME}.pkg"
    echo -e "   2. 按照安装向导提示操作"
    echo -e "   3. 输入系统密码（如需要）"
    echo -e "   4. 安装完成后在 Applications 文件夹找到 LimeReader"

    echo
    echo -e "${YELLOW}💡 安装体验:${NC}"
    echo -e "   • 专业级安装向导界面"
    echo -e "   • 自动处理旧版本卸载"
    echo -e "   • 一键安装到 Applications 文件夹"
    echo -e "   • 符合 macOS 用户习惯"

    # 可选：创建产品构建（带欢迎界面）
    if command -v productbuild &> /dev/null; then
        echo
        echo -e "${YELLOW}🎨 创建带界面的安装包...${NC}"

        # 创建分布定义文件
        cat > "Distribution.xml" << EOF
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
    <title>LimeReader ${VERSION}</title>
    <background file="deploy/resources/dmg_background.png" alignment="center" scaling="proportional"/>
    <welcome file="Welcome.txt" mime-type="text/plain"/>
    <license file="License.txt" mime-type="text/plain"/>
    <conclusion file="Conclusion.txt" mime-type="text/plain"/>
    <options require-scripts="false" customize="never" />
    <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
    <pkg-ref id="${IDENTIFIER}">
        <bundle-version>
            <bundle id="com.limereader.app" CFBundleShortVersionString="${VERSION}" CFBundleVersion="${VERSION}"/>
        </bundle-version>
    </pkg-ref>
    <choices-outline>
        <line choice="default">
            <line choice="${IDENTIFIER}"/>
        </line>
    </choices>
    <choice id="default" visible="false" selected="true"/>
    <choice id="${IDENTIFIER}" visible="true" title="LimeReader 应用程序" description="安装 LimeReader 到 Applications 文件夹">
        <pkg-ref id="${IDENTIFIER}"/>
    </choice>
</installer-gui-script>
EOF

        # 创建欢迎文件
        cat > "Welcome.txt" << EOF
欢迎安装 LimeReader ${VERSION}

LimeReader 是一款专业的长图片处理工具，特别适合：

• 长截图浏览和管理
• 漫画和长图阅读
• PDF 文件处理
• 智能分页布局

点击"继续"开始安装。
EOF

        # 创建许可协议
        cat > "License.txt" << EOF
LimeReader 软件许可协议

本软件为免费软件，您可以自由使用和分发。

使用本软件即表示您同意以下条款：
1. 本软件按"原样"提供，不提供任何明示或暗示的担保
2. 开发者不对使用本软件造成的任何损失承担责任
3. 您不得对本软件进行逆向工程或修改

保留所有权利。
EOF

        # 创建安装完成说明
        cat > "Conclusion.txt" << EOF
安装完成！

LimeReader 已成功安装到您的 Applications 文件夹。

🚀 启动方式：
• 从 Launchpad 启动
• 从 Applications 文件夹启动
• 使用 Spotlight 搜索 "LimeReader"

📞 如有问题：
• 查看应用内置帮助
• 联系技术支持

感谢使用 LimeReader！
EOF

        # 创建带界面的安装包
        if [ -f "deploy/resources/dmg_background.png" ]; then
            productbuild \
                --distribution "Distribution.xml" \
                --package-path "${PKG_NAME}.pkg" \
                --resources "./" \
                "${PKG_NAME}_Installer.pkg" 2>/dev/null || true

            if [ -f "${PKG_NAME}_Installer.pkg" ]; then
                echo -e "${GREEN}✨ 专业版安装包已创建: ${PKG_NAME}_Installer.pkg${NC}"
            fi
        fi
    fi

    echo
    echo -e "${GREEN}🎊 构建完成！${NC}"

else
    echo -e "${RED}❌ PKG 构建失败${NC}"
    exit 1
fi